﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Web;
namespace dbiparser
{
    public class dbiparser
    {
        private string _wsurl;
        public string WSURL { get { return _wsurl; } set { _wsurl = value; } }
        private string _wslogin;
        public string WSLOGIN { get { return _wslogin; } set { _wslogin = value; } }
        private string _wssenha;
        public string WSSENHA { get { return _wssenha; } set { _wssenha = value; } }

        private string xmlretorno;
        public string XMLRETORNO { get { return xmlretorno; } }
        private string xmlretornoSemPagina;
        public string XMLRETORNOSEMPAGINA { get { return xmlretornoSemPagina; } }

        private bool usarlistasintegra = false;
        public bool USARLISTASINTEGRA { get { return usarlistasintegra; } set { usarlistasintegra = value; } }
        //private fwlog log = (fwlog)ConfigurationManager.GetSection("fwlog");

        private string _proxy;
        public string PROXY
        {
            set
            {
                _proxy = value;
            }
        }
        private string _proxyuser;
        public string PROXYUSER
        {
            set
            {
                _proxyuser = value;
            }
        }
        private string _proxypwd;
        public string PROXYPWD
        {
            set
            {
                _proxypwd = value;
            }
        }

        private string _proxydomain;
        public string PROXYDOMAIN
        {
            set
            {
                _proxydomain = value;
            }
        }


        
        public dbiparser()
        { }

        public dbiparser(string url, string login, string senha)
        {
            _wsurl = url;
            _wslogin = login;
            _wssenha = senha;
            // ignorar ssl
            System.Net.ServicePointManager.ServerCertificateValidationCallback +=
    delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                            System.Security.Cryptography.X509Certificates.X509Chain chain,
                            System.Net.Security.SslPolicyErrors sslPolicyErrors)
        {
            return true; // **** Always accept

        };
            // fim ignorar
        }


        public Object Consulta(int tipoconsulta, string param1, string param2, string param3, string param4, string param5)
        {
            Object ret = new Object();
            try
            {
                IDBIwsservice ws = new IDBIwsservice();
                //dbilb.dbiws ws = new dbilb.dbiws();
                //br.com.smartscore.ws3.IDBIwsservice ws = new br.com.smartscore.ws3.IDBIwsservice();
                //string u = ws.Url.ToString();
                ws.Url = _wsurl;
                ws.Timeout = 300000;
                
                if (_proxy != "")
                {
                    System.Net.WebProxy px = new System.Net.WebProxy(_proxy);
                    if (_proxyuser != "" && _proxypwd != "" && _proxydomain != "")
                    {
                        //System.Net.CredentialCache credcache = new System.Net.CredentialCache();
                        //System.Net.NetworkCredential cred = new System.Net.NetworkCredential(_proxyuser, _proxypwd, _proxydomain);
                        //credcache.Add(new Uri(_proxy), "Basic", cred);
                        px.Credentials = new System.Net.NetworkCredential(_proxyuser, _proxypwd, _proxydomain);
                        //px.Credentials = credcache;

                    }
                    else
                    {
                        px.UseDefaultCredentials = true;
                    }
                    ws.Proxy = px;
                }


                xmlretorno = ws.ConsultaOnLine(_wslogin, _wssenha, tipoconsulta, param1, param2, param3, param4, param5).ToString();

                //classes.dbiparser dbip = new classes.dbiparser();
                //classes.dbiparser.RFCPF cpf = (classes.dbiparser.RFCPF)dbip.xml2classe(al, 3);

                ret = xml2classe(xmlretorno, tipoconsulta);
                
                if (erroconsulta == null) removaPaginaXML();

            }
            catch (Exception ex)
            {
                //log.erro("dbiparser.consulta", "", ex.Message.ToString());
                throw (ex);
            }
            return ret;
        }

        private void removaPaginaXML()
        {
            try
            {
                XmlDocument xdoc = new XmlDocument();
                xdoc.LoadXml(xmlretorno);
                var remove_node = xdoc.SelectSingleNode("/ResultadoConsulta/Registro/Pagina");
                if (remove_node != null)
                    remove_node.RemoveAll();
                //xdoc.RemoveChild(remove_node);
                xmlretornoSemPagina = xdoc.InnerXml.ToString();
            }
            catch(Exception ex)
            {
                // não throw nada,
                //throw (ex);
            }
        }

        // CódConsulta Consulta
        //1 Sintegra - CNPJ
        //2 Sintegra - Inscrição Estadual
        //3 Receita Federal - CNPJ
        //4 Receita Federal – CPF
        //5 Secretaria da Fazenda (apenas SP e PE) – CNPJ
        //6 Secretaria da Fazenda (apenas SP e PE) – Inscrição Estadual
        //7 Suframa – CNPJ
        //8 (não utilizado)
        //9 Simples Nacional – CNPJ
        //10 Prefeitura de São Paulo – CNPJ
        //11 Anvisa – CNPJ
        //12 ANP – CNPJ
        //13 Municípios IBGE – Nome do Município e Estado
        //14 Dataprev – PIS
        //15 CRM (Conselho Regional de Medicina) – Código CRM e Estado
        //16 Correios – CEP
        //17 (não utilizado)
        //18 ANTT (Agência Nacional Transportes Terrestres) – CPF/CNPJ ou CRNTRC
        //19 Consulta Obrigatoriedade NFE (apenas SP) – CNPJ e Estado
        //20 Consulta Completa Nota Fiscal eletrônica - DANFE
        //21 Coordenadas Geográficas (GoogleMaps) – Rua, Numero, cidade e Estado
        private Object xml2classe(string _xml, int _tipoConsulta)
        {
            tipoconsulta = _tipoConsulta;
            Object ret = new Object();
            try
            {
                switch (_tipoConsulta)
                {
                    // SINTEGRA CNPJ
                    case 1:
                    // SINTEGRA IE
                    case 2:
                        //ret = xml2SINTEGRA(_xml);
                        if (usarlistasintegra)
                        {
                            ret = xml2ListSINTEGRA(_xml);
                        }
                        else
                        {
                            ret = xml2SINTEGRA(_xml);
                        }
                        break;
                    //Receita Federal - CNPJ
                    case 3:
                        ret = xml2RFCNPJ(_xml);
                        break;
                    //Receita Federal – CPF
                    case 4:
                        ret = xml2RFCPF(_xml);
                        break;
                    // Secretaria da Fazenda (apenas SP e PE) – CNPJ
                    case 5:
                    // Secretaria da Fazenda (apenas SP e PE) – Inscrição Estadual
                    case 6:
                        ret = xml2SECFAZENDA(_xml);
                        break;
                    // Suframa – CNPJ
                    case 7:
                        ret = xml2SUFRAMA(_xml);
                        break;
                    //8 (não utilizado)
                    //9 Simples Nacional – CNPJ
                    case 9:
                        ret = xml2SIMPLES(_xml);
                        break;
                    //10 Prefeitura de São Paulo – CNPJ
                    case 10:
                        ret = xml2PREFSAOPAULO(_xml);
                        break;
                    //11 Anvisa – CNPJ
                    case 11:
                        ret = xml2ANVISA(_xml);
                        break;
                    //12 ANP – CNPJ
                    case 12:
                        ret = xml2ANP(_xml);
                        break;
                    //13 Municípios IBGE – Nome do Município e Estado
                    case 13:
                        ret = xml2MUNICIPIOIBGE(_xml);
                        break;
                    //14 Dataprev – PIS
                    case 14:
                        ret = xml2DATAPREVPIS(_xml);
                        break;
                    //15 CRM (Conselho Regional de Medicina) – Código CRM e Estado
                    case 15:
                        ret = xml2CRM(_xml);
                        break;
                    //16 Correios – CEP
                    case 16:
                        ret = xml2CEP(_xml);
                        break;
                    //17 (não utilizado)
                    //18 ANTT (Agência Nacional Transportes Terrestres) – CPF/CNPJ ou CRNTRC
                    case 18:
                        ret = xml2ANTT(_xml);
                        break;
                    //19 Consulta Obrigatoriedade NFE (apenas SP) – CNPJ e Estado
                    case 19:
                        ret = xml2ONFE(_xml);
                        break;
                    //20 Consulta Completa Nota Fiscal eletrônica - DANFE
                    case 20:
                    case 21:
                        ret = xml2NFE(_xml, _tipoConsulta);

                        break;
                    //22 Coordenadas Geográficas (GoogleMaps) – Rua, Numero, cidade e Estado
                    case 22:
                        ret = xml2GEOPOS(_xml);
                        break;
                    case 23:
                        ret = xml2CNDDAU(_xml);
                        break;
                    case 24:
                        ret = xml2CNFGTS(_xml);
                        break;
                    case 25:
                        ret = xml2CNINSS(_xml);
                        break;
                }
            }
            catch (Exception ex)
            {
                //log.erro("dbiparser.xml2Classe", "", ex.Message.ToString());
                throw (ex);
            }
            return ret;
        }

        public ERRO ERROCONSULTA { get { return erroconsulta; } }
        private ERRO erroconsulta;
        private int tipoconsulta;
        private int erroCount = 0;
        public class ERRO
        {
            public string CODERRO { get; set; }
            public string ERRODESCRI { get; set; }
            public string PAGINA { get; set; }
        }

        private void TrataErro(string _xml)
        {

            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta");

            ERRO erro = new ERRO();

            foreach (XmlNode xn in xnList)
            {
                erro.CODERRO = xn["CodErro"].InnerText;
                erro.ERRODESCRI = xn["Erro"].InnerText;
                XmlNode node = xn.SelectSingleNode("Pagina");
                if (node != null)
                {
                    erro.PAGINA = xn["Pagina"].InnerText;
                }
                else
                {
                    erro.PAGINA = "";
                }
                
            }
            erroconsulta = erro;
            erroCount++;
        }

        /// <summary>
        /// Objeto Receita federal CPF
        /// </summary>
        public class RFCPF
        {
            public string CPF { get; set; }
            public string NOME { get; set; }
            public string SITUACAOCADASTRAL { get; set; }
            public DateTime DATACONSULTA { get; set; }
            public string CODIGOCONSULTA { get; set; }
            public string PAGINA { get; set; }
        }
        private RFCNPJ xml2RFCNPJ(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");
            RFCNPJ cnpj = new RFCNPJ();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {

                foreach (XmlNode xn in xnList)
                {
                    DateTime outDate;
                    cnpj.CNPJ = xn["CNPJ"].InnerText;
                    if (DateTime.TryParse(xn["DataAbertura"].InnerText, out outDate))
                        cnpj.DATAABERTURA = outDate; // Convert.ToDateTime(xn["DataAbertura"].InnerText);
                    cnpj.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    cnpj.NOMEFANTASIA = xn["NomeFantasia"].InnerText;
                    cnpj.CODIGOAE = xn["CodigoAE"].InnerText;
                    cnpj.DESCRICAOAE = xn["DescricaoAE"].InnerText;
                    cnpj.CODIGONJ = xn["CodigoNJ"].InnerText;
                    cnpj.DESCRICAONJ = xn["DescricaoNJ"].InnerText;

                    cnpj.CODIGOAESECUNDARIA = xn["CodigoAESecundaria"].InnerText;
                    cnpj.DESCRICAOAESECUNDARIA = xn["DescricaoAESecundaria"].InnerText;

                    cnpj.LOGRADOURO = xn["Logradouro"].InnerText;
                    cnpj.NUMERO = xn["Numero"].InnerText;
                    cnpj.COMPLEMENTO = xn["Complemento"].InnerText;
                    cnpj.CEP = xn["CEP"].InnerText;
                    cnpj.BAIRRO = xn["Bairro"].InnerText;
                    cnpj.CIDADE = xn["Cidade"].InnerText;
                    cnpj.ESTADO = xn["Estado"].InnerText;
                    cnpj.SITUACAO = xn["Situacao"].InnerText;
                    DateTime datasituacao;
                    if (DateTime.TryParse(xn["DataSituacao"].InnerText, out datasituacao))
                        cnpj.DATASITUACAO = datasituacao;
                    cnpj.SITUACAOESPECIAL = xn["SituacaoEspecial"].InnerText;
                    DateTime datasituespecial;
                    if (DateTime.TryParse(xn["DataSituacaoEspecial"].InnerText, out datasituespecial))
                        cnpj.DATASITUACAOESPECIAL = Convert.ToDateTime(xn["DataSituacaoEspecial"].InnerText);
                    cnpj.DATACONSULTA = Convert.ToDateTime(xn["DataConsulta"].InnerText);
                    cnpj.HORACONSULTA = xn["HoraConsulta"].InnerText;
                    cnpj.TIPOEMPRESA = xn["TipoEmpresa"].InnerText;
                    cnpj.MOTIVOSITUACAO = xn["MotivoSituacao"].InnerText;
                    cnpj.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return cnpj;

        }

        /// <summary>
        /// Objeto Receita federal CNPJ
        /// </summary>
        public class RFCNPJ
        {
            public string CNPJ { get; set; }
            public DateTime DATAABERTURA { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string NOMEFANTASIA { get; set; }
            public string CODIGOAE { get; set; }
            public string DESCRICAOAE { get; set; }
            public string CODIGONJ { get; set; }
            public string DESCRICAONJ { get; set; }
            public string CODIGOAESECUNDARIA { get; set; }
            public string DESCRICAOAESECUNDARIA { get; set; }
            public string LOGRADOURO { get; set; }
            public string NUMERO { get; set; }
            public string COMPLEMENTO { get; set; }
            public string CEP { get; set; }
            public string BAIRRO { get; set; }
            public string CIDADE { get; set; }
            public string ESTADO { get; set; }
            public string SITUACAO { get; set; }
            public DateTime DATASITUACAO { get; set; }
            public string SITUACAOESPECIAL { get; set; }
            public DateTime DATASITUACAOESPECIAL { get; set; }
            public DateTime DATACONSULTA { get; set; }
            public string HORACONSULTA { get; set; }
            public string TIPOEMPRESA { get; set; }
            public string MOTIVOSITUACAO { get; set; }
            public string PAGINA { get; set; }
        }
        private RFCPF xml2RFCPF(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            //XmlNodeList nodelist = xdoc.DocumentElement.ChildNodes;

            ////Response.Write("Number of items in data node: " + nodelist.Count + "<br />");
            ////Response.Write("Document root node: " + xmldoc.DocumentElement.Name + "<br />");

            ////Parse through all nodes
            //foreach ( XmlNode outerNode in nodelist)
            //{
            //     //Write the outerNode name such as Microsoft, Adobe, Dell
            //     string lala = "--> Outer node name: " + outerNode.Name + "<br />";

            //     //Check if this matches with our selected item
            //     foreach (XmlNode InnerNode in outerNode.ChildNodes)
            //     {
            //          //Write the InnerNode name and value such as Visual Studio 2005, 
            //          //Adobe Reader, Computers, etc
            //          string lele = "------> Inner node Name: " + InnerNode.Name + "<br />";
            //          string lili = "------> Inner node InnerText: " + InnerNode.InnerText + "<br />";
            //     }
            //}

            RFCPF cpf = new RFCPF();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    cpf.CPF = xn["CPF"].InnerText;
                    cpf.CODIGOCONSULTA = xn["CodigoConsulta"].InnerText;
                    cpf.DATACONSULTA = Convert.ToDateTime(xn["DataConsulta"].InnerText);
                    cpf.NOME = xn["Nome"].InnerText;
                    cpf.PAGINA = xn["Pagina"].InnerText;
                    cpf.SITUACAOCADASTRAL = xn["SituacaoCadastral"].InnerText;
                }
                //cpf.CPF = xdoc["ResultadosConsulta"]["Registro"]["CPF"].Value.ToString();
                //cpf.CODIGOCONSULTA = xdoc["ResultadoConsulta"]["Registro"]["CodigoConsulta"].InnerText;
                //cpf.DATACONSULTA = Convert.ToDateTime(xdoc["ResultadoConsulta"]["Registro"]["DataConsulta"].Value.ToString());
                //cpf.NOME = xdoc["ResultadoConsulta"]["Registro"]["Nome"].Value.ToString();
                //cpf.PAGINA = xdoc["ResultadoConsulta"]["Registro"]["Pagina"].Value.ToString();
                //cpf.SITUACAOCADASTRAL = xdoc["ResultadoConsulta"]["Registro"]["SituacaoCadastral"].Value.ToString();
            }
            return cpf;
        }

        public class ListaSINTEGRA
        {
            public List<SINTEGRA> LISTASI { get; set; }
        }

        /// <summary>
        /// Objeto SINTEGRA
        /// </summary>
        public class SINTEGRA
        {
            public string CNPJ { get; set; }
            public string IE { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string NOMEFANTASIA { get; set; }
            public string LOGRADOURO { get; set; }
            public string NUMERO { get; set; }
            public string COMPLEMENTO { get; set; }
            public string BAIRRO { get; set; }
            public string CIDADE { get; set; }
            public string ESTADO { get; set; }
            public string CEP { get; set; }
            public string EMAIL { get; set; }
            public string SITUACAO { get; set; }
            public DateTime DATAINCLUSAO { get; set; }
            public DateTime DATABAIXA { get; set; }
            public DateTime DATACONSULTA { get; set; }
            public string NUMEROCONSULTA { get; set; }
            public string ENQUADRAMENTOEMPRESA { get; set; }
            public string EMISSAONFE { get; set; }
            public string CODINCRA { get; set; }

            public string REGIMEAPURACAO { get; set; }
            public string MOTIVOBAIXA { get; set; }
            public string REGULARIDADEFISCAL { get; set; }
            public string PAGINA { get; set; }
        }


        private ListaSINTEGRA xml2ListSINTEGRA(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");
            ListaSINTEGRA LS = new ListaSINTEGRA();
            LS.LISTASI = new List<SINTEGRA>();

            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                XmlNodeList xnListItem = xdoc.SelectNodes("/ResultadoConsulta/Registro");
                if (xnListItem.Count != 0)
                {
                    foreach (XmlNode xni in xnListItem)
                    {
                        SINTEGRA sintegra = new SINTEGRA();
                        sintegra.CNPJ = xni["CNPJ"].InnerText;
                        sintegra.IE = xni["IE"].InnerText;
                        sintegra.RAZAOSOCIAL = xni["RazaoSocial"].InnerText;
                        sintegra.NOMEFANTASIA = xni["NomeFantasia"].InnerText;
                        sintegra.LOGRADOURO = xni["Logradouro"].InnerText;
                        sintegra.NUMERO = xni["Numero"].InnerText;
                        sintegra.COMPLEMENTO = xni["Complemento"].InnerText;
                        sintegra.BAIRRO = xni["Bairro"].InnerText;
                        sintegra.CIDADE = xni["Cidade"].InnerText;
                        sintegra.ESTADO = xni["Estado"].InnerText;
                        sintegra.CEP = xni["CEP"].InnerText;
                        sintegra.EMAIL = xni["Email"].InnerText;
                        sintegra.SITUACAO = xni["Situacao"].InnerText;
                        sintegra.DATAINCLUSAO = (string.IsNullOrEmpty(xni["DataInclusao"].InnerText)) ? new DateTime(1901, 1, 1) : Convert.ToDateTime(xni["DataInclusao"].InnerText);
                        DateTime databaixa;
                        if (DateTime.TryParse(xni["DataBaixa"].InnerText, out databaixa))
                            sintegra.DATABAIXA = databaixa;
                        DateTime dataconsulta;
                        if (DateTime.TryParse(xni["DataConsulta"].InnerText, out dataconsulta))
                            sintegra.DATACONSULTA = dataconsulta;
                        sintegra.NUMEROCONSULTA = xni["NumeroConsulta"].InnerText;
                        sintegra.REGIMEAPURACAO = xni["RegimeApuracao"].InnerText;
                        sintegra.MOTIVOBAIXA = xni["MotivoBaixa"].InnerText;
                        sintegra.REGULARIDADEFISCAL = xni["RegularidadeFiscal"].InnerText;

                        sintegra.ENQUADRAMENTOEMPRESA = xni["EnquadramentoEmpresa"].InnerText;
                        sintegra.EMISSAONFE = xni["EmissaoNFE"].InnerText;
                        sintegra.CODINCRA = xni["CodIncra"].InnerText;
                        
                        
                        sintegra.PAGINA = xni["Pagina"].InnerText;
                        LS.LISTASI.Add(sintegra);
                    }

                }
            }
            return LS;

        }


        private SINTEGRA xml2SINTEGRA(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            SINTEGRA sintegra = new SINTEGRA();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    sintegra.CNPJ = xn["CNPJ"].InnerText;
                    sintegra.IE = xn["IE"].InnerText;
                    sintegra.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    sintegra.NOMEFANTASIA = xn["NomeFantasia"].InnerText;
                    sintegra.LOGRADOURO = xn["Logradouro"].InnerText;
                    sintegra.NUMERO = xn["Numero"].InnerText;
                    sintegra.COMPLEMENTO = xn["Complemento"].InnerText;
                    sintegra.BAIRRO = xn["Bairro"].InnerText;
                    sintegra.CIDADE = xn["Cidade"].InnerText;
                    sintegra.ESTADO = xn["Estado"].InnerText;
                    sintegra.CEP = xn["CEP"].InnerText;
                    sintegra.EMAIL = xn["Email"].InnerText;
                    sintegra.SITUACAO = xn["Situacao"].InnerText;
                    sintegra.DATAINCLUSAO = (string.IsNullOrEmpty(xn["DataInclusao"].InnerText)) ? new DateTime(1901, 1, 1) : Convert.ToDateTime(xn["DataInclusao"].InnerText);
                    DateTime databaixa;
                    if (DateTime.TryParse(xn["DataBaixa"].InnerText, out databaixa))
                        sintegra.DATABAIXA = databaixa;
                    DateTime dataconsulta;
                    if (DateTime.TryParse(xn["DataConsulta"].InnerText, out dataconsulta))
                        sintegra.DATACONSULTA = dataconsulta;
                    sintegra.NUMEROCONSULTA = xn["NumeroConsulta"].InnerText;
                    sintegra.REGIMEAPURACAO = xn["RegimeApuracao"].InnerText;
                    sintegra.MOTIVOBAIXA = xn["MotivoBaixa"].InnerText;
                    sintegra.REGULARIDADEFISCAL = xn["RegularidadeFiscal"].InnerText;
                    sintegra.PAGINA = xn["Pagina"].InnerText;

                    sintegra.ENQUADRAMENTOEMPRESA = xn["EnquadramentoEmpresa"].InnerText;
                    sintegra.EMISSAONFE = xn["EmissaoNFE"].InnerText;
                    sintegra.CODINCRA = xn["CodIncra"].InnerText;
                        
                }
            }
            return sintegra;
        }

        /// <summary>
        /// Objeto Secretaria da Fazenda (apenas SP e PE)
        /// </summary>
        public class SECFAZENDA
        {

            public string SITUACAO { get; set; }
            public string CNPJ { get; set; }
            public string IE { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string NOMEFANTASIA { get; set; }
            public string LOGRADOURO { get; set; }
            public string NUMERO { get; set; }
            public string COMPLEMENTO { get; set; }
            public string BAIRRO { get; set; }
            public string CIDADE { get; set; }
            public string ESTADO { get; set; }
            public string CEP { get; set; }
            public string EMAIL { get; set; }
            public DateTime DATAINCLUSAO { get; set; }
            public DateTime DATABAIXA { get; set; }
            public DateTime DATACONSULTA { get; set; }
            public string NUMEROCONSULTA { get; set; }
            public string REGIMEAPURACAO { get; set; }
            public string ENQUADRAMENTOEMPRESA { get; set; }
            public string MOTIVOBAIXA { get; set; }
            public string QTDENCONTRADA { get; set; }
            public string IESENCONTRADAS { get; set; }
            public string PAGINA { get; set; }
        }
        private SECFAZENDA xml2SECFAZENDA(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            SECFAZENDA secfazenda = new SECFAZENDA();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    secfazenda.SITUACAO = xn["Situacao"].InnerText;
                    secfazenda.CNPJ = xn["CNPJ"].InnerText;
                    secfazenda.IE = xn["IE"].InnerText;
                    secfazenda.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    secfazenda.NOMEFANTASIA = xn["NomeFantasia"].InnerText;
                    secfazenda.LOGRADOURO = xn["Logradouro"].InnerText;
                    secfazenda.NUMERO = xn["Numero"].InnerText;
                    secfazenda.COMPLEMENTO = xn["Complemento"].InnerText;
                    secfazenda.BAIRRO = xn["Bairro"].InnerText;
                    secfazenda.CIDADE = xn["Cidade"].InnerText;
                    secfazenda.ESTADO = xn["Estado"].InnerText;
                    secfazenda.CEP = xn["CEP"].InnerText;
                    secfazenda.EMAIL = xn["Email"].InnerText;
                    secfazenda.DATAINCLUSAO = Convert.ToDateTime(xn["DataInclusao"].InnerText);
                    DateTime databaixa;
                    if (DateTime.TryParse(xn["DataBaixa"].InnerText, out databaixa))
                        secfazenda.DATABAIXA = databaixa;
                    DateTime dataconsulta;
                    if (DateTime.TryParse(xn["DataConsulta"].InnerText, out dataconsulta))
                        secfazenda.DATACONSULTA = dataconsulta;
                    secfazenda.NUMEROCONSULTA = xn["NumeroConsulta"].InnerText;
                    secfazenda.REGIMEAPURACAO = xn["RegimeApuracao"].InnerText;
                    secfazenda.ENQUADRAMENTOEMPRESA = xn["EnquadramentoEmpresa"].InnerText;
                    secfazenda.MOTIVOBAIXA = xn["MotivoBaixa"].InnerText;
                    secfazenda.QTDENCONTRADA = xn["QtdEncontrada"].InnerText;
                    secfazenda.IESENCONTRADAS = xn["IEsEncontradas"].InnerText;
                    secfazenda.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return secfazenda;
        }


        /// <summary>
        /// Objeto SUFRAMA CNPJ
        /// </summary>
        public class SUFRAMA
        {
            public string CNPJ { get; set; }
            public string SUFRAMANUM { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string LOGRADOURO { get; set; }
            public string NUMERO { get; set; }
            public string COMPLEMENTO { get; set; }
            public string BAIRRO { get; set; }
            public string ESTADO { get; set; }
            public string CIDADE { get; set; }
            public string CEP { get; set; }
            public string TELEFONE { get; set; }
            public string SITUACAO { get; set; }
            public DateTime DATACONSULTA { get; set; }
            public string ATIVIDADEECONOMICA { get; set; }
            public DateTime DATAVALIDADE { get; set; }
            public string TIPOINCENTIVO { get; set; }
            public string EMAIL { get; set; }
            public string PAGINA { get; set; }
        }
        private SUFRAMA xml2SUFRAMA(string _xml)
        {
            //System.Diagnostics.Debugger.Launch();

            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(" & ", " &amp; ").Replace("& ", "&amp; ");
            //_xml = _xml.Replace(":&nbsp", "").Replace("&nbsp", "");
            
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            SUFRAMA suframa = new SUFRAMA();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    suframa.CNPJ = xn["CNPJ"].InnerText;
                    suframa.SUFRAMANUM = xn["Suframa"].InnerText;
                    suframa.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    suframa.LOGRADOURO = xn["Logradouro"].InnerText;
                    suframa.NUMERO = xn["Numero"].InnerText;
                    suframa.COMPLEMENTO = xn["Complemento"].InnerText;
                    suframa.BAIRRO = xn["Bairro"].InnerText;
                    suframa.ESTADO = xn["Estado"].InnerText;
                    suframa.CIDADE = xn["Cidade"].InnerText;
                    suframa.CEP = xn["CEP"].InnerText;
                    suframa.TELEFONE = xn["Telefone"].InnerText;
                    suframa.SITUACAO = xn["Situacao"].InnerText;
                    DateTime dataconsulta;
                    if (DateTime.TryParse(xn["DataConsulta"].InnerText, out dataconsulta))
                        suframa.DATACONSULTA = dataconsulta;
                    suframa.ATIVIDADEECONOMICA = xn["AtividadeEconomica"].InnerText;
                    DateTime datavalidade;
                    if (DateTime.TryParse(xn["DataValidade"].InnerText, out datavalidade))
                        suframa.DATAVALIDADE = datavalidade;
                    suframa.TIPOINCENTIVO = xn["TipoIncentivo"].InnerText;
                    suframa.EMAIL = xn["Email"].InnerText;
                    suframa.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return suframa;
        }

        /// <summary>
        /// Objeto Simples Nacional CNPJ
        /// </summary>
        public class SIMPLES
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string SITUACAO { get; set; }
            public DateTime DATASITUACAO { get; set; }
            public string SITUACAOSIMEI { get; set; }
            public string SITUACAOANTERIOR { get; set; }
            public string PAGINA { get; set; }
        }
        private SIMPLES xml2SIMPLES(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(" & ", " &amp; ").Replace("& ", "&amp; ");
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            SIMPLES simples = new SIMPLES();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    simples.CNPJ = xn["CNPJ"].InnerText;
                    simples.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    simples.SITUACAO = xn["Situacao"].InnerText;
                    DateTime datasituacao;
                    if (DateTime.TryParse(xn["DataSituacao"].InnerText, out datasituacao))
                        simples.DATASITUACAO = datasituacao;
                    simples.SITUACAOSIMEI = xn["SituacaoSIMEI"].InnerText;
                    simples.SITUACAOANTERIOR = xn["SituacaoAnterior"].InnerText;
                    simples.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return simples;
        }

        /// <summary>
        /// Objeto Prefeitura de Sao Paulo CNPJ
        /// </summary>
        public class PREFSAOPAULO
        {
            public string QTDENCONTRADA { get; set; }
            public string CCMENCONTRADOS { get; set; }
            public string CNPJ { get; set; }
            public string CCM { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string DATAINSCRICAO { get; set; }
            public string DATACONSULTA { get; set; }
            public string PAGINA { get; set; }
        }
        private PREFSAOPAULO xml2PREFSAOPAULO(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(":&nbsp", "").Replace("&nbsp", "");
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            PREFSAOPAULO prefSP = new PREFSAOPAULO();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {

                    prefSP.QTDENCONTRADA = xn["QtdEncontrada"].InnerText;
                    prefSP.CCMENCONTRADOS = xn["CCMEncontrados"].InnerText;
                    prefSP.CNPJ = xn["CNPJ"].InnerText;
                    prefSP.CCM = xn["CCM"].InnerText;
                    prefSP.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    prefSP.DATAINSCRICAO = xn["DataInscricao"].InnerText;
                    prefSP.DATACONSULTA = xn["Dataconsulta"].InnerText;
                    prefSP.PAGINA = xn["Pagina"].InnerText;


                }
            }
            return prefSP;
        }

        /// <summary>
        /// objeto Anvisa CNPJ
        /// </summary>
        public class ANVISA
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string AUTORIZACAO { get; set; }
            public string TIPOAUTORIZACAO { get; set; }
            public DateTime DATAAUTORIZACAO { get; set; }
            public DateTime VENCIMENTOAUTORIZACAO { get; set; }
            public string PROCESSO { get; set; }
            public string RESPONSAVELLEGAL { get; set; }
            public string RESPONSAVELTECNICO { get; set; }
            public string LOGRADOURO { get; set; }
            public string BAIRRO { get; set; }
            public string MUNICIPIO { get; set; }
            public string ESTADO { get; set; }
            public string CEP { get; set; }
            public string EMAIL { get; set; }
            public string TELEFONE { get; set; }
            public string STATUS { get; set; }
            public string SITUACAO { get; set; }
            public string PAGINA { get; set; }
        }

        private ANVISA xml2ANVISA(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(" & ", " &amp; ").Replace("& ", "&amp; ");
            //_xml = _xml.Replace("&", "|||");// HttpUtility.HtmlDecode(_xml);

            xdoc.LoadXml(_xml);

            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            ANVISA anvisa = new ANVISA();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    anvisa.CNPJ = xn["CNPJ"].InnerText;
                    anvisa.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    anvisa.AUTORIZACAO = xn["Autorizacao"].InnerText;
                    anvisa.TIPOAUTORIZACAO = xn["TipoAutorizacao"].InnerText;
                    anvisa.DATAAUTORIZACAO = Convert.ToDateTime(xn["DataAutorizacao"].InnerText);
                    DateTime vencimento;
                    if (DateTime.TryParse(xn["VencimentoAutorizacao"].InnerText, out vencimento))
                        anvisa.VENCIMENTOAUTORIZACAO = vencimento;
                    anvisa.PROCESSO = xn["Processo"].InnerText;
                    anvisa.RESPONSAVELLEGAL = xn["ResponsavelLegal"].InnerText;
                    anvisa.RESPONSAVELTECNICO = xn["ResponsavelTecnico"].InnerText;
                    anvisa.LOGRADOURO = xn["Logradouro"].InnerText;
                    anvisa.BAIRRO = xn["Bairro"].InnerText;
                    anvisa.MUNICIPIO = xn["Municipio"].InnerText;
                    anvisa.ESTADO = xn["Estado"].InnerText;
                    anvisa.CEP = xn["CEP"].InnerText;
                    anvisa.EMAIL = xn["Email"].InnerText;
                    anvisa.TELEFONE = xn["Telefone"].InnerText;
                    anvisa.STATUS = xn["Status"].InnerText;
                    anvisa.SITUACAO = xn["Situacao"].InnerText;
                    anvisa.PAGINA = HttpUtility.HtmlDecode(xn["Pagina"].InnerText.Replace("|||","&"));
                }
            }
            return anvisa;
        }

        /// <summary>
        /// Objeto ANP CNPJ
        /// </summary>
        public class ANP
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string NOMEFANTASIA { get; set; }
            public string ENDERECO { get; set; }
            public string COMPLEMENTO { get; set; }
            public string BAIRRO { get; set; }
            public string CIDADE { get; set; }
            public string ESTADO { get; set; }
            public string CEP { get; set; }
            public string BANDEIRAPOSTO { get; set; }
            public string AUTORIZACAO { get; set; }
            public string DATAPUBLICACAO { get; set; }
            public string TIPOPOSTO { get; set; }
            public string DATACONSULTA { get; set; }
            public string HORACONSULTA { get; set; }
            public string NUMERODESPACHO { get; set; }
            public string SITUACAO { get; set; }
            public string PAGINA { get; set; }

        }

        private ANP xml2ANP(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            ANP anp = new ANP();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    anp.CNPJ = xn["CNPJ"].InnerText;
                    anp.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    anp.NOMEFANTASIA = xn["NomeFantasia"].InnerText;
                    anp.ENDERECO = xn["Endereco"].InnerText;
                    anp.COMPLEMENTO = xn["Complemento"].InnerText;
                    anp.BAIRRO = xn["Bairro"].InnerText;
                    anp.CIDADE = xn["Cidade"].InnerText;
                    anp.ESTADO = xn["Estado"].InnerText;
                    anp.CEP = xn["CEP"].InnerText;
                    anp.BANDEIRAPOSTO = xn["BandeiraPosto"].InnerText;
                    anp.AUTORIZACAO = xn["Autorizacao"].InnerText;
                    anp.DATAPUBLICACAO = xn["DataPublicacao"].InnerText;
                    anp.TIPOPOSTO = xn["TipoPosto"].InnerText;
                    anp.DATACONSULTA = xn["DataConsulta"].InnerText;
                    anp.HORACONSULTA = xn["HoraConsulta"].InnerText;
                    anp.NUMERODESPACHO = xn["NumeroDespacho"].InnerText;
                    anp.SITUACAO = xn["Situacao"].InnerText;
                    anp.PAGINA = xn["Pagina"].InnerText;

                }
            }
            return anp;
        }

        /// <summary>
        /// Objeto Municipio IBGE Nome Municipio - Estado
        /// </summary>
        public class MUNICIPIOIBGE
        {
            public string CODIGOIBGE { get; set; }
            public string MUNICIPIO { get; set; }
            public string ESTADO { get; set; }
            public string ERRO { get; set; }

        }

        private MUNICIPIOIBGE xml2MUNICIPIOIBGE(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            MUNICIPIOIBGE ibge = new MUNICIPIOIBGE();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    ibge.CODIGOIBGE = xn["CodigoIBGE"].InnerText;
                    ibge.MUNICIPIO = xn["Municipio"].InnerText;
                    ibge.ESTADO = xn["Estado"].InnerText;
                    ibge.ERRO = xn["Erro"].InnerText;

                }
            }
            return ibge;
        }

        /// <summary>
        /// Objeto DATAPREV PIS 
        /// </summary>
        public class DATAPREVPIS
        {
            public string PIS { get; set; }
            public string CATEGORIA { get; set; }
            public string NOME { get; set; }
            public string ENDERECO { get; set; }
            public string BAIRRO { get; set; }
            public string CEP { get; set; }
            public string MUNICIPIO { get; set; }
            public string ESTADO { get; set; }
            public string PAGINA { get; set; }
        }

        private DATAPREVPIS xml2DATAPREVPIS(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            DATAPREVPIS pis = new DATAPREVPIS();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    pis.PIS = xn["Pis"].InnerText;
                    pis.CATEGORIA = xn["Categoria"].InnerText;
                    pis.NOME = xn["Nome"].InnerText;
                    pis.ENDERECO = xn["Endereco"].InnerText;
                    pis.BAIRRO = xn["Bairro"].InnerText;
                    pis.CEP = xn["CEP"].InnerText;
                    pis.MUNICIPIO = xn["Municipio"].InnerText;
                    pis.ESTADO = xn["Estado"].InnerText;
                    pis.PAGINA = xn["Pagina"].InnerText;

                }
            }
            return pis;
        }


        /// <summary>
        /// Objeto CRM -cod crm e UF
        /// </summary>
        public class CRM
        {
            public string NOME { get; set; }
            public string CRMNUM { get; set; }
            public string ESTADO { get; set; }
            public string TIPOINSCRICAO { get; set; }
            public string SITUACAO { get; set; }
            public string ESPECIALIDADE { get; set; }
            public string PAGINA { get; set; }

        }

        private CRM xml2CRM(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            CRM crm = new CRM();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    crm.NOME = xn["Nome"].InnerText;
                    crm.CRMNUM = xn["CRM"].InnerText;
                    crm.ESTADO = xn["Estado"].InnerText;
                    crm.TIPOINSCRICAO = xn["TipoInscricao"].InnerText;
                    crm.SITUACAO = xn["Situacao"].InnerText;
                    crm.ESPECIALIDADE = xn["Especialidade"].InnerText;
                    crm.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return crm;
        }

        /// <summary>
        /// Objeto CEP dos Correios - numero do CEP
        /// </summary>
        public class CEP
        {
            public string RUA { get; set; }
            public string COMPLEMENTO { get; set; }
            public string BAIRRO { get; set; }
            public string CIDADE { get; set; }
            public string ESTADO { get; set; }
            public string CEPNUM { get; set; }
            public string CODLOGRADOURO { get; set; }
            public string CODBAIRRO { get; set; }
            public string CODLOCALIDADE { get; set; }
            public string ERRO { get; set; }

        }

        private CEP xml2CEP(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            CEP cep = new CEP();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    
                    cep.RUA = xn["Rua"].InnerText;
                    cep.COMPLEMENTO = xn["Complemento"].InnerText;
                    cep.BAIRRO = xn["Bairro"].InnerText;
                    cep.CIDADE = xn["Cidade"].InnerText;
                    cep.ESTADO = xn["Estado"].InnerText;
                    cep.CEPNUM = xn["CEP"].InnerText;
                    cep.ERRO = xn["Erro"].InnerText;
                    cep.CODLOGRADOURO = xn["CodLogradouro"].InnerText;
                    cep.CODBAIRRO = xn["CodBairro"].InnerText;
                    cep.CODLOCALIDADE = xn["CodLocalidade"].InnerText;
                }
            }
            return cep;
        }

        /// <summary>
        /// bjeto ANTT (Agência Nacional Transportes Terrestres) – CPF/CNPJ ou CRNTRC
        /// </summary>
        public class ANTT
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string CRNTRC { get; set; }
            public string STATUS { get; set; }
            public string TIPO { get; set; }
            public string PAGINA { get; set; }
        }
        private ANTT xml2ANTT(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            ANTT antt = new ANTT();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    antt.CNPJ = xn["CNPJ"].InnerText;
                    antt.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    antt.CRNTRC = xn["CRNTRC"].InnerText;
                    antt.STATUS = xn["Status"].InnerText;
                    antt.TIPO = xn["Tipo"].InnerText;
                    antt.PAGINA = xn["Pagina"].InnerText;

                }
            }
            return antt;
        }

        /// <summary>
        /// Objeto Consulta Obrigatoriedade NFE (apenas SP) – CNPJ e Estado
        /// </summary>
        public class ONFE
        {
            public string CNPJ { get; set; }
            public string IE { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public DateTime DATAHOMOLOGACAO { get; set; }
            public string SITUACAO { get; set; }
            public DateTime DATASITUACAO { get; set; }
            public string PAGINA { get; set; }

        }
        private ONFE xml2ONFE(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            ONFE onfe = new ONFE();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    onfe.CNPJ = xn["CNPJ"].InnerText;
                    onfe.IE = xn["IE"].InnerText;
                    onfe.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    DateTime datahomologacao;
                    if (DateTime.TryParse(xn["DataHomologacao"].InnerText, out datahomologacao))
                        onfe.DATAHOMOLOGACAO = datahomologacao;
                    onfe.SITUACAO = xn["Situacao"].InnerText;
                    DateTime datasituacao;
                    if (DateTime.TryParse(xn["DataSituacao"].InnerText, out datasituacao))
                        onfe.DATASITUACAO = datasituacao;
                    onfe.PAGINA = xn["Pagina"].InnerText;


                }
            }
            return onfe;
        }

        /// <summary>
        /// Consulta Completa Nota Fiscal eletrônica - DANFE
        /// </summary>
        public class NFE
        {
            public string CHAVEACESSO { get; set; }
            public string NUMERONFE { get; set; }
            public DateTime DATAEMISSAO { get; set; }
            public string VALORTOTAL { get; set; }
            public string EMISSAOPROCESSO { get; set; }
            public string EMISSAOVERSAOPROCESSO { get; set; }
            public string EMISSAOTIPO { get; set; }
            public string EMISSAOFINALIDADE { get; set; }
            public string EMISSAONATUREZAOPERACAO { get; set; }
            public string EMISSAOTIPOOPERACAO { get; set; }
            public string EMISSAOFORMAPAGAMENTO { get; set; }
            public string EMISSAODIGESTVALUE { get; set; }
            public string SITUACAO { get; set; }
            public string SITUACAOOCORRENCIA { get; set; }
            public string SITUACAOPROTOCOLO { get; set; }
            public string SITUACAODATAHORA { get; set; }
            public string EMITENTERAZAOSOCIAL { get; set; }
            public string EMITENTENOMEFANTASIA { get; set; }
            public string EMITENTECNPJ { get; set; }
            public string EMITENTEENDERECO { get; set; }
            public string EMITENTEBAIRRO { get; set; }
            public string EMITENTECEP { get; set; }
            public string EMITENTEMUNICIPIO { get; set; }
            public string EMITENTETELEFONE { get; set; }
            public string EMITENTEESTADO { get; set; }
            public string EMITENTEPAIS { get; set; }
            public string EMITENTEINSCRICAOESTADUAL { get; set; }
            public string EMITENTEMUNICIPIOICMS { get; set; }
            public string DESTINATARIORAZAOSOCIAL { get; set; }
            public string DESTINATARIOCNPJ { get; set; }
            public string DESTINATARIOENDERECO { get; set; }
            public string DESTINATARIOBAIRRO { get; set; }
            public string DESTINATARIOCEP { get; set; }
            public string DESTINATARIOMUNICIPIO { get; set; }
            public string DESTINATARIOTELEFONE { get; set; }
            public string DESTINATARIOESTADO { get; set; }
            public string DESTINATARIOPAIS { get; set; }
            public string DESTINATARIOINSCRICAOESTADUAL { get; set; }
            public string BASECALCULOICMS { get; set; }
            public string VALORICMS { get; set; }
            public string BASECALCULOICMSST { get; set; }
            public string VALORICMSST { get; set; }
            public string VALORPRODUTOS { get; set; }
            public string VALORFRETE { get; set; }
            public string VALORSEGURO { get; set; }
            public string OUTRASDESPESAS { get; set; }
            public string VALORIPI { get; set; }
            public string VALORTOTALNFE { get; set; }
            public string VALORDESCONTOS { get; set; }
            public string VALORII { get; set; }
            public string VALORPIS { get; set; }
            public string VALORCOFINS { get; set; }
            public string MODALIDADEFRETE { get; set; }
            public string TRANSPORTADORCNPJ { get; set; }
            public string TRANSPORTADORRAZAOSOCIAL { get; set; }
            public string TRANSPORTADORINSCRICAOESTADUAL { get; set; }
            public string TRANSPORTADORENDERECO { get; set; }
            public string TRANSPORTADORMUNICIPIO { get; set; }
            public string TRANSPORTADORESTADO { get; set; }
            public string TRANSPORTADORPLACAVEICULO { get; set; }
            public string TRANSPORTADORESTADOVEICULO { get; set; }
            public string TRANSPORTADORVOLUMEQUANTIDADE { get; set; }
            public string TRANSPORTADORVOLUMEESPECIE { get; set; }
            public string TRANSPORTADORVOLUMEPESOLIQUIDO { get; set; }
            public string TRANSPORTADORVOLUMEPESOBRUTO { get; set; }
            public string FATURANUMERO { get; set; }
            public string FATURAVALORORIGINAL { get; set; }
            public string FATURAVALORLIQUIDO { get; set; }
            public string DUPLICATANUMERO { get; set; }
            public string DUPLICATAVENCIMENTO { get; set; }
            public string DUPLICATAVALOR { get; set; }
            public string INFORMACOESADICIONAIS { get; set; }
            public string VERSAOXML { get; set; }
            public string PAGINA { get; set; }
            public List<NFEITEM> ITENS { get; set; }

        }

        private NFE xml2NFE(string _xml, int _tpconsulta)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            NFE nfe = new NFE();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    nfe.CHAVEACESSO = xn["ChaveAcesso"].InnerText;
                    nfe.NUMERONFE = xn["NumeroNFE"].InnerText;
                    nfe.DATAEMISSAO = Convert.ToDateTime(xn["DataEmissao"].InnerText);
                    nfe.VALORTOTAL = xn["ValorTotal"].InnerText;
                    nfe.EMISSAOPROCESSO = xn["EmissaoProcesso"].InnerText;
                    nfe.EMISSAOVERSAOPROCESSO = xn["EmissaoVersaoProcesso"].InnerText;
                    nfe.EMISSAOTIPO = xn["EmissaoTipo"].InnerText;
                    nfe.EMISSAOFINALIDADE = xn["EmissaoFinalidade"].InnerText;
                    nfe.EMISSAONATUREZAOPERACAO = xn["EmissaoNaturezaOperacao"].InnerText;
                    nfe.EMISSAOTIPOOPERACAO = xn["EmissaoTipoOperacao"].InnerText;
                    nfe.EMISSAOFORMAPAGAMENTO = xn["EmissaoFormaPagamento"].InnerText;
                    nfe.EMISSAODIGESTVALUE = xn["EmissaoDigestValue"].InnerText;
                    nfe.SITUACAO = xn["Situacao"].InnerText;
                    nfe.SITUACAOOCORRENCIA = xn["SituacaoOcorrencia"].InnerText;
                    nfe.SITUACAOPROTOCOLO = xn["SituacaoProtocolo"].InnerText;
                    nfe.SITUACAODATAHORA = xn["SituacaoDataHora"].InnerText;
                    nfe.EMITENTERAZAOSOCIAL = xn["EmitenteRazaoSocial"].InnerText;
                    nfe.EMITENTENOMEFANTASIA = xn["EmitenteNomeFantasia"].InnerText;
                    nfe.EMITENTECNPJ = xn["EmitenteCNPJ"].InnerText;
                    nfe.EMITENTEENDERECO = xn["EmitenteEndereco"].InnerText;
                    nfe.EMITENTEBAIRRO = xn["EmitenteBairro"].InnerText;
                    nfe.EMITENTECEP = xn["EmitenteCEP"].InnerText;
                    nfe.EMITENTEMUNICIPIO = xn["EmitenteMunicipio"].InnerText;
                    nfe.EMITENTETELEFONE = xn["EmitenteTelefone"].InnerText;
                    nfe.EMITENTEESTADO = xn["EmitenteEstado"].InnerText;
                    nfe.EMITENTEPAIS = xn["EmitentePais"].InnerText;
                    nfe.EMITENTEINSCRICAOESTADUAL = xn["EmitenteInscricaoEstadual"].InnerText;
                    nfe.EMITENTEMUNICIPIOICMS = xn["EmitenteMunicipioICMS"].InnerText;
                    nfe.DESTINATARIORAZAOSOCIAL = xn["DestinatarioRazaoSocial"].InnerText;
                    nfe.DESTINATARIOCNPJ = xn["DestinatarioCNPJ"].InnerText;
                    nfe.DESTINATARIOENDERECO = xn["DestinatarioEndereco"].InnerText;
                    nfe.DESTINATARIOBAIRRO = xn["DestinatarioBairro"].InnerText;
                    nfe.DESTINATARIOCEP = xn["DestinatarioCEP"].InnerText;
                    nfe.DESTINATARIOMUNICIPIO = xn["DestinatarioMunicipio"].InnerText;
                    nfe.DESTINATARIOTELEFONE = xn["DestinatarioTelefone"].InnerText;
                    nfe.DESTINATARIOESTADO = xn["DestinatarioEstado"].InnerText;
                    nfe.DESTINATARIOPAIS = xn["DestinatarioPais"].InnerText;
                    nfe.DESTINATARIOINSCRICAOESTADUAL = xn["DestinatarioInscricaoEstadual"].InnerText;
                    nfe.BASECALCULOICMS = xn["BaseCalculoICMS"].InnerText;
                    nfe.VALORICMS = xn["ValorICMS"].InnerText;
                    nfe.BASECALCULOICMSST = xn["BaseCalculoICMSST"].InnerText;
                    nfe.VALORICMSST = xn["ValorICMSST"].InnerText;
                    nfe.VALORPRODUTOS = xn["ValorProdutos"].InnerText;
                    nfe.VALORFRETE = xn["ValorFrete"].InnerText;
                    nfe.VALORSEGURO = xn["ValorSeguro"].InnerText;
                    nfe.OUTRASDESPESAS = xn["OutrasDespesas"].InnerText;
                    nfe.VALORIPI = xn["ValorIPI"].InnerText;
                    nfe.VALORTOTALNFE = xn["ValorTotalNFE"].InnerText;
                    nfe.VALORDESCONTOS = xn["ValorDescontos"].InnerText;
                    nfe.VALORII = xn["ValorII"].InnerText;
                    nfe.VALORPIS = xn["ValorPIS"].InnerText;
                    nfe.VALORCOFINS = xn["ValorCOFINS"].InnerText;
                    nfe.MODALIDADEFRETE = xn["ModalidadeFrete"].InnerText;
                    nfe.TRANSPORTADORCNPJ = xn["TransportadorCNPJ"].InnerText;
                    nfe.TRANSPORTADORRAZAOSOCIAL = xn["TransportadorRazaoSocial"].InnerText;
                    nfe.TRANSPORTADORINSCRICAOESTADUAL = xn["TransportadorInscricaoEstadual"].InnerText;
                    nfe.TRANSPORTADORENDERECO = xn["TransportadorEndereco"].InnerText;
                    nfe.TRANSPORTADORMUNICIPIO = xn["TransportadorMunicipio"].InnerText;
                    nfe.TRANSPORTADORESTADO = xn["TransportadorEstado"].InnerText;
                    nfe.TRANSPORTADORPLACAVEICULO = xn["TransportadorPlacaVeiculo"].InnerText;
                    nfe.TRANSPORTADORESTADOVEICULO = xn["TransportadorEstadoVeiculo"].InnerText;
                    nfe.TRANSPORTADORVOLUMEQUANTIDADE = xn["TransportadorVolumeQuantidade"].InnerText;
                    nfe.TRANSPORTADORVOLUMEESPECIE = xn["TransportadorVolumeEspecie"].InnerText;
                    nfe.TRANSPORTADORVOLUMEPESOLIQUIDO = xn["TransportadorVolumePesoLiquido"].InnerText;
                    nfe.TRANSPORTADORVOLUMEPESOBRUTO = xn["TransportadorVolumePesoBruto"].InnerText;
                    nfe.FATURANUMERO = xn["FaturaNumero"].InnerText;
                    nfe.FATURAVALORORIGINAL = xn["FaturaValorOriginal"].InnerText;
                    nfe.FATURAVALORLIQUIDO = xn["FaturaValorLiquido"].InnerText;
                    nfe.DUPLICATANUMERO = xn["DuplicataNumero"].InnerText;
                    nfe.DUPLICATAVENCIMENTO = xn["DuplicataVencimento"].InnerText;
                    nfe.DUPLICATAVALOR = xn["DuplicataValor"].InnerText;
                    nfe.INFORMACOESADICIONAIS = xn["InformacoesAdicionais"].InnerText;
                    nfe.VERSAOXML = xn["VersaoXML"].InnerText;
                    nfe.PAGINA = xn["Pagina"].InnerText;

                    if (_tpconsulta == 21)
                    {
                        nfe.ITENS = new List<NFEITEM>();
                        NFEITEM nitem = new NFEITEM();
                        XmlNodeList xnListItem = xdoc.SelectNodes("/ResultadoConsulta/Registro/Item/Registro");
                        if (xnListItem.Count != 0)
                        {
                            foreach (XmlNode xni in xnListItem)
                            {
                                nitem = new NFEITEM();
                                nitem.ALIQUOTAICMSNORMAL = xni["Aliquota_ICMS_Normal"].InnerText;
                                nitem.ALIQUOTAICMSST = xni["Aliquota_ICMS_ST"].InnerText;
                                nitem.ALIQUOTAIMPOSTO = xni["AliquotaImposto"].InnerText;
                                nitem.BASECALCULOICMSNORMAL = xni["BaseCalculo_ICMS_Normal"].InnerText;
                                nitem.BASECALCULOICMSST = xni["BaseCalculo_ICMS_ST"].InnerText;
                                nitem.BASECALCULOIMPOSTO = xni["BaseCalculoImposto"].InnerText;
                                nitem.CFOP = xni["CFOP"].InnerText;
                                nitem.CODIGOEANCOMERCIAL = xni["CodigoEANComercial"].InnerText;
                                nitem.CODIGOEANTRIBUTAVEL = xni["CodigoEANTributavel"].InnerText;
                                nitem.CODIGOENQUADRAMENTOIMPOSTO = xni["CodigoEnquadramentoImposto"].InnerText;
                                nitem.CODIGONCM = xni["CodigoNCM"].InnerText;
                                nitem.CODIGOPRODUTO = xni["CodigoProduto"].InnerText;
                                nitem.CST = xni["CST"].InnerText;
                                nitem.DESCRICAO = xni["Descricao"].InnerText;
                                nitem.GENERO = xni["Genero"].InnerText;
                                nitem.IDREG = string.IsNullOrEmpty(xni["ItemNo"].InnerText) ? 0 : Convert.ToInt32(xni["ItemNo"].InnerText);
                                nitem.ITEMNO = string.IsNullOrEmpty(xni["ItemNo"].InnerText) ? 0 : Convert.ToInt32(xni["ItemNo"].InnerText);
                                nitem.MODALIDADEDEFINICAOBCICMSNORMAL = xni["ModalidadeDefinicao_BC_ICMS_Normal"].InnerText;
                                nitem.MODALIDADEDEFINICAOBCICMSST = xni["ModalidadeDefinicao_BC_ICMS_ST"].InnerText;
                                nitem.ORIGEMMERCADORIA = xni["OrigemMercadoria"].InnerText;
                                nitem.PERCENTUALMVAICMSST = xni["Percentual_MVA_ICMS_ST"].InnerText;
                                nitem.QTD = string.IsNullOrEmpty(xni["Quantidade"].InnerText) ? 0 : Convert.ToDecimal(xni["Quantidade"].InnerText);
                                nitem.QTDCOMERCIAL = string.IsNullOrEmpty(xni["QuantidadeComercial"].InnerText) ? 0 : Convert.ToDecimal(xni["QuantidadeComercial"].InnerText);
                                nitem.QTDTRIBUTAVEL = string.IsNullOrEmpty(xni["QuantidadeTributavel"].InnerText) ? 0 : Convert.ToDecimal(xni["QuantidadeTributavel"].InnerText);
                                nitem.TRIBUTACAOICMS = xni["TributacaoICMS"].InnerText;
                                nitem.UNIDADECOMERCIAL = xni["UnidadeComercial"].InnerText;
                                nitem.UNIDADETRIBUTAVEL = xni["UnidadeTributavel"].InnerText;
                                nitem.VALOR = string.IsNullOrEmpty(xni["Valor"].InnerText) ? 0 : Convert.ToDecimal(xni["Valor"].InnerText);
                                nitem.VALORICMSNORMAL = xni["Valor_ICMS_Normal"].InnerText;
                                nitem.VALORICMSST = xni["Valor_ICMS_ST"].InnerText;
                                nitem.VALORIPI = xni["ValorIPI"].InnerText;
                                nitem.VALORUNITARIOCOMERCIAL = string.IsNullOrEmpty(xni["ValorUnitarioComercial"].InnerText) ? 0 : Convert.ToDecimal(xni["ValorUnitarioComercial"].InnerText);
                                nitem.VALORUNITARIOTRIBUTACAO = string.IsNullOrEmpty(xni["ValorUnitarioTributacao"].InnerText) ? 0 : Convert.ToDecimal(xni["ValorUnitarioTributacao"].InnerText);

                                nfe.ITENS.Add(nitem);
                                /*
                                nfe.ITENS.Add(new NFEITEM() { 
                                    //ALIQUOTAICMSNORMAL = xni[""].InnerText,
                                    ITEMNO = string.IsNullOrEmpty( xni["ItemNo"].InnerText) ? 0: Convert.ToInt32(xni["ItemNo"].InnerText),
                                    DESCRICAO = xni["Descricao"].InnerText,
                                    QTD = string.IsNullOrEmpty(xni["Quantidade"].InnerText) ? 0: Convert.ToDecimal(xni["Quantidade"].InnerText),
                                    VALOR = string.IsNullOrEmpty(xni["Valor"].InnerText) ? 0 : Convert.ToDecimal(xni["Valor"].InnerText),
                                    CODIGOPRODUTO = xni["CodigoProduto"].InnerText,
                                    CODIGONCM = xni["CodigoNCM"].InnerText,
                                    CFOP = xni["CFOP"].InnerText,
                                    GENERO = xni["Genero"].InnerText,
                                    CODIGOEANCOMERCIAL = xni["CodigoEANComercial"].InnerText,
                                    UNIDADECOMERCIAL = xni["UnidadeComercial"].InnerText,
                                    QTDCOMERCIAL = string.IsNullOrEmpty(xni["QuantidadeComercial"].InnerText) ? 0 : Convert.ToDecimal(xni["QuantidadeComercial"].InnerText), // string.IsNullOrEmpty() ? 0 : Convert.ToDecimal()
                                    CODIGOEANTRIBUTAVEL = xni["CodigoEANTributavel"].InnerText,
                                    UNIDADETRIBUTAVEL = xni["UnidadeTributavel"].InnerText,
                                    QTDTRIBUTAVEL = string.IsNullOrEmpty(xni["QuantidadeTributavel"].InnerText) ? 0 : Convert.ToDecimal(xni["QuantidadeTributavel"].InnerText),
                                    VALORUNITARIOCOMERCIAL  = string.IsNullOrEmpty(xni["ValorUnitarioComercial"].InnerText) ? 0 : Convert.ToDecimal(xni["ValorUnitarioComercial"].InnerText),
                                    VALORUNITARIOTRIBUTACAO = string.IsNullOrEmpty(xni["ValorUnitarioTributacao"].InnerText) ? 0 : Convert.ToDecimal(xni["ValorUnitarioTributacao"].InnerText),
                                    ORIGEMMERCADORIA  = xni["OrigemMercadoria"].InnerText,
                                    TRIBUTACAOICMS  = xni["TributacaoICMS"].InnerText,
                                    MODALIDADEDEFINICAOBCICMSNORMAL  = xni["ModalidadeDefinicao_BC_ICMS_Normal"].InnerText,
                                    BASECALCULOICMSNORMAL  = xni["BaseCalculo_ICMS_Normal"].InnerText,
                                    ALIQUOTAICMSNORMAL  = xni["Aliquota_ICMS_Normal"].InnerText,
                                    VALORICMSNORMAL  = xni["Valor_ICMS_Normal"].InnerText,
                                    BASECALCULOICMSST  = xni["BaseCalculo_ICMS_ST"].InnerText,
                                    ALIQUOTAICMSST  = xni["Aliquota_ICMS_ST"].InnerText,
                                    VALORICMSST  = xni["Valor_ICMS_ST"].InnerText,
                                    PERCENTUALMVAICMSST  = xni["Percentual_MVA_ICMS_ST"].InnerText,
                                    MODALIDADEDEFINICAOBCICMSST  = xni["ModalidadeDefinicao_BC_ICMS_ST"].InnerText,
                                    CODIGOENQUADRAMENTOIMPOSTO  = xni["CodigoEnquadramentoImposto"].InnerText,
                                    BASECALCULOIMPOSTO  = xni["BaseCalculoImposto"].InnerText,
                                    ALIQUOTAIMPOSTO  = xni["AliquotaImposto"].InnerText,
                                    VALORIPI = xni["ValorIPI"].InnerText,
                                    CST  = xni["CST"].InnerText
                                });
                                 * */
                            }
                        }
                    }
                }
            }
            return nfe;
        }

        public class NFEITEM
        { 
            public int IDREG { get; set; }
            public int ITEMNO { get; set; }
            public string DESCRICAO { get; set; }
            public decimal QTD { get; set; }
            public decimal VALOR { get; set; }
            public string CODIGOPRODUTO { get; set; }
            public string CODIGONCM { get; set; }
            public string CFOP { get; set; }
            public string GENERO { get; set; }
            public string CODIGOEANCOMERCIAL { get; set; }
            public string UNIDADECOMERCIAL { get; set; }
            public decimal QTDCOMERCIAL { get; set; }
            public string CODIGOEANTRIBUTAVEL { get; set; }
            public string UNIDADETRIBUTAVEL { get; set; }
            public decimal QTDTRIBUTAVEL { get; set; }
            public decimal VALORUNITARIOCOMERCIAL { get; set; }
            public decimal VALORUNITARIOTRIBUTACAO { get; set; }
            public string ORIGEMMERCADORIA { get; set; }
            public string TRIBUTACAOICMS { get; set; }
            public string MODALIDADEDEFINICAOBCICMSNORMAL { get; set; }
            public string BASECALCULOICMSNORMAL { get; set; }
            public string ALIQUOTAICMSNORMAL { get; set; }
            public string VALORICMSNORMAL { get; set; }
            public string BASECALCULOICMSST { get; set; }
            public string ALIQUOTAICMSST { get; set; }
            public string VALORICMSST { get; set; }
            public string PERCENTUALMVAICMSST { get; set; }
            public string MODALIDADEDEFINICAOBCICMSST { get; set; }
            public string CODIGOENQUADRAMENTOIMPOSTO { get; set; }
            public string BASECALCULOIMPOSTO { get; set; }
            public string ALIQUOTAIMPOSTO { get; set; }
            public string VALORIPI { get; set; }
            public string CST { get; set; }
        }


        /// <summary>
        /// Objeto - Coordenadas Geográficas (GoogleMaps) – Rua, Numero, cidade e Estado
        /// </summary>
        public class GEOPOS
        {
            public string COORDENADAS { get; set; }
            public decimal LATITUDE { get; set; }
            public decimal LONGITUDE { get; set; }
        }

        private GEOPOS xml2GEOPOS(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            GEOPOS geopos = new GEOPOS();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    geopos.COORDENADAS = xn["Coordenadas"].InnerText;

                }
                if (geopos.COORDENADAS != "")
                {
                    string[] cord = geopos.COORDENADAS.Split(',');
                    geopos.LATITUDE = Convert.ToDecimal(cord[0].Replace('.', ','));
                    geopos.LONGITUDE = Convert.ToDecimal(cord[1].Replace('.', ','));

                }
            }
            return geopos;
        }


        /// <summary>
        /// Objeto Certidão Negativa Debito divida ativa uniao
        /// </summary>
        public class CNDDAU
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string VALIDADE { get; set; }
            public string DATAEMISSAO { get; set; }
            public string HORAEMISSAO { get; set; }
            public string CODIGOCONTROLE { get; set; }
            public string PAGINA { get; set; }
        }
        private CNDDAU xml2CNDDAU(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(" & ", " &amp; ").Replace("& ", "&amp; ");
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            CNDDAU cnddau = new CNDDAU();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    cnddau.CNPJ = xn["CNPJ"].InnerText;
                    cnddau.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    cnddau.VALIDADE = xn["Validade"].InnerText;
                    cnddau.DATAEMISSAO = xn["DataEmissao"].InnerText;
                    cnddau.HORAEMISSAO = xn["HoraEmissao"].InnerText;
                    cnddau.CODIGOCONTROLE = xn["CodigoControle"].InnerText;
                    cnddau.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return cnddau;
        }


        /// <summary>
        /// Objeto Certidão Negativa FGTS
        /// </summary>
        public class CNFGTS
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string NOMEFANTASIA { get; set; }
            public string DATAEMISSAO { get; set; }
            public string HORAEMISSAO { get; set; }
            public string SITUACAO { get; set; }
            public string PAGINA { get; set; }
        }
        private CNFGTS xml2CNFGTS(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(" & ", " &amp; ").Replace("& ", "&amp; ");
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            CNFGTS cnfgts = new CNFGTS();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    cnfgts.CNPJ = xn["CNPJ"].InnerText;
                    cnfgts.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    cnfgts.NOMEFANTASIA = xn["NomeFantasia"].InnerText;
                    cnfgts.DATAEMISSAO = xn["DataEmissao"].InnerText;
                    cnfgts.HORAEMISSAO = xn["HoraEmissao"].InnerText;
                    cnfgts.SITUACAO = xn["Situacao"].InnerText;
                    cnfgts.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return cnfgts;
        }


        /// <summary>
        /// Objeto Certidão Negativa INSS
        /// </summary>
        public class CNINSS
        {
            public string CNPJ { get; set; }
            public string RAZAOSOCIAL { get; set; }
            public string CERTIDAO { get; set; }
            public string DATAEMISSAO { get; set; }
            public string DATAVALIDADE { get; set; }
            public string DATACANCELAMENTO { get; set; }
            public string PAGINA { get; set; }
        }
        private CNINSS xml2CNINSS(string _xml)
        {
            XmlDocument xdoc = new XmlDocument();
            _xml = _xml.Replace(" & ", " &amp; ").Replace("& ", "&amp; ");
            xdoc.LoadXml(_xml);
            XmlNodeList xnList = xdoc.SelectNodes("/ResultadoConsulta/Registro");

            CNINSS cninss = new CNINSS();
            if (xnList.Count == 0)
            {
                TrataErro(_xml);
            }
            else
            {
                foreach (XmlNode xn in xnList)
                {
                    cninss.CNPJ = xn["CNPJ"].InnerText;
                    cninss.RAZAOSOCIAL = xn["RazaoSocial"].InnerText;
                    cninss.CERTIDAO = xn["Certidao"].InnerText;
                    cninss.DATAEMISSAO = xn["DataEmissao"].InnerText;
                    cninss.DATAVALIDADE = xn["DataValidade"].InnerText;
                    cninss.DATACANCELAMENTO = xn["DataCancelamento"].InnerText;
                    cninss.PAGINA = xn["Pagina"].InnerText;
                }
            }
            return cninss;
        }

    }
}
